package main

import "fmt"

//现在有一堆乱序的数，比如：5 9 1 6 8 14 6 49 25 4 6 3。
//
//第一轮迭代，从第一个数开始，左边到右边进行扫描，找到最小的数 1，与数列里的第一个数交换位置。
//
//第二轮迭代，从第二个数开始，左边到右边进行扫描，找到第二小的数 3，与数列里的第二个数交换位置。
//
//第三轮迭代，从第三个数开始，左边到右边进行扫描，找到第三小的数 4，与数列里的第三个数交换位置。
//
//第N轮迭代：....
//
//经过交换，最后的结果为：1 3 4 5 6 6 6 8 9 14 25 49，我们可以看到已经排好序了。
//
//每次扫描数列找出最小的数，然后与第一个数交换，然后排除第一个数，从第二个数开始重复这个操作，这种排序叫做简单选择排序。
//选择排序是一个不稳定的排序算法，比如数组：[5 6 5 1]，第一轮迭代时最小的数是 1，那么与第一个元素 5 交换位置，这样数字 1 就和数字 5 交换了位置，导致两个相同的数字 5 排序后位置变了。

func SelectSort(list []int) {
	lena := len(list)
	for i := 0; i <= lena-1; i++ {
		tmp := i
		for j := i + 1; j <= lena-1; j++ {
			if list[j] < list[tmp] {
				tmp = j
			}
		}
		list[i], list[tmp] = list[tmp], list[i]
	}
}

func main() {
	var list = []int{5, 9, 1, 6, 8, 14, 6, 49, 25, 4, 6, 3}
	SelectSort(list)
	fmt.Println(list)
}
